package com.jketing.service.ams.sys;

import javax.annotation.Resource;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jketing.entity.ams.sys.Operation;
import com.jketing.repository.BaseRepository;
import com.jketing.repository.ams.sys.OperationRepository;
import com.jketing.service.BaseService;


/**
 * OperationService	按纽服务类
 * 	功能：
 * 			继承扩展服务基类实现子类特有方法及功能；
 * 			如：多表查询和多表操作等；
 * 					可注入其它实体的仓库类或使用jdbc实现Dao调用本地Sql进行多表查询
 * 
 * @author  李荣华
 * @version v1.0
 * @date    2017-10-29
 * @since   Spring-data 1.11.4
 */
@Service
public class OperationService extends BaseService<Operation,String> {
	
	/**
	 * repository String按IOC容器管理的Bean类型自动注入模块仓库操作实例 .
	 */
	@Autowired
	private OperationRepository repository;
	
	/**
	 * String按IOC容器管理的Bean名称自动注入服务基类的仓库操作实例
	 * 	 
	 * @param BaseRepository<Operation,String> repository
	 * 
	 * @return void
	 */
	@Resource(name="operationRepository")
	public void setBaseRepository(BaseRepository<Operation,String> repository) {
		super.setBaseRepository(repository);
	}

	/**
	 * 新增时调用的save方法
	 * 
	 * 功能:由程序设置PK,不由数据库自动生成
	 * 目的:为实现系统数据库多地部署进行数据同步
	 * 		  PK自增无法完成同步
	 * 
	 * 注:
	 * 	1:因调用实体setId方法，故本方法不能写到基类
	 * 	2:主键是查询数据总条数加1生成和当前时间生成
	 * 	 
	 * @param entity 实例
	 * 
	 * @return Operation 返回save后的实例
	 */
	@RequiresPermissions(value={"operation:create"})
	@Override
	public <S extends Operation> S save(S entity) {
		entity.setId(getTimeId());
		return repository.save(entity);
	}
	
}
